package es.uned.ii.si3.dao;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import es.uned.ii.si3.model.Departamento;
import es.uned.ii.si3.model.Profesor;

public class DepartamentoDAOImpl implements DepartamentoDAO {
	
	private static Logger log = Logger.getLogger(RolDAOImpl.class);

	
	public DepartamentoDAOImpl() {
		
	}

	public Departamento getDepartamento(Profesor profesor) {

		Connection conn = ConnectionFactory.getConnection();
		PreparedStatement ptmt = null;
		ResultSet resultado = null;
		Departamento departamento = null;
		try {
			ptmt = conn.prepareStatement("SELECT d.* FROM departamentos AS d INNER JOIN datos_profesores AS p on d.idDepartamento=p.idDepartamento WHERE p.idUsuario = ?");
			ptmt.setInt(1, profesor.getIdUsuario());
			
			resultado = ptmt.executeQuery();
			
			if (resultado.next()){
				departamento = new Departamento();
				departamento.setIdDepartamento(resultado.getInt("idDepartamento"));
				departamento.setDescripcion(resultado.getString("descripcion"));
			}
		} catch (SQLException e) {
			departamento = null;
		} finally {
			try {
				resultado.close();
				resultado = null;
			} catch (Exception e) { }
			
			try {
				ptmt.close();
				ptmt = null; 
			} catch (Exception e) { }
		}
		ConnectionFactory.release(conn);
		return departamento;
	}

	/*
	 *   Devuelve una lista de todos los departamentos disponibles 
	 *   */
	public List<Departamento> getAllDepartamentos() {
		
		Connection conn = ConnectionFactory.getConnection();
		List<Departamento> listaDepartamentos = new ArrayList<Departamento>();
		PreparedStatement ptmt = null;
		ResultSet resultado = null;
		
		try {
			ptmt = conn.prepareStatement("select * from departamentos;");
			resultado = ptmt.executeQuery();
			
			while (resultado.next()){
				Departamento departamento = new Departamento();
				departamento.setIdDepartamento(resultado.getInt("idDepartamento"));
				departamento.setDescripcion(resultado.getString("descripcion"));
				
				listaDepartamentos.add(departamento);
			}
		} catch (Exception e) {
			listaDepartamentos = null;
		} finally {
			try {
				resultado.close();
				resultado = null;
			} catch (Exception e) { }
			
			try {
				ptmt.close();
				ptmt = null; 
			} catch (Exception e) { }
		}
		ConnectionFactory.release(conn);
		return listaDepartamentos;
	}



	
}
